﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Sispe.Entities;
using Sispe.BussinesLogic;
using Microsoft.Practices.Unity;

namespace Sispe.UI
{
    public partial class FrmContratosObreros : Form
    {
        [Dependency]
        public IContratoBL contratoBL { get; set; }

        [Dependency]
        public IUsuarioMenuBL usuMenuBL { get; set; }

        public FrmContratosObreros()
        {
            InitializeComponent();
            this.BuildUp();
        }

        bool isContrato;

        public USUARIO currentUsuarioContrato { get; set; }

        private void FrmContratosObreros_Load(object sender, EventArgs e)
        {
            if (currentUsuarioContrato != null)
            {
                menuLlena();

                if (isContrato == true)
                {
                    cargarFecha();
                }
                else
                    CargarDatos();
            }
            else
            {
                if (isContrato == true)
                {
                    cargarFecha();
                }
                else
                    CargarDatos();
            }
        }

        public void menuLlena()
        {
            var datoUsuario = usuMenuBL.GetAllFromUsuarioByPersonaFromLogin(currentUsuarioContrato.TRABAJADOR.PERSONA.Dni);

            var permiso = (from p in usuMenuBL.GetAllUsuarioMenu(datoUsuario.IdUsuario)
                           select p.MENU.Tag.ToString()).ToArray();

            System.Windows.Forms.Button[] botones = new System.Windows.Forms.Button[]{
            this.btnCancelar,this.button2,this.btnNuevo,this.btnPermiso,this.btnSanciones,this.btnCondiciones};

            var noVisible = from nv in botones
                            where !permiso.Contains(nv.Tag.ToString())
                            select nv;

            noVisible.ToList().ForEach(nv => nv.Enabled = false);

            CargarDatos();
        }

        private void CargarDatos()
        {
            cONTRATOBindingSource.DataSource = contratoBL.GetAllFromContratoByObreros();
        }

        private void rdbTodos_CheckedChanged(object sender, EventArgs e)
        {
            if (rdbTodos.Checked)
            {
                CargarDatos();
            }
            if (rdbvigentes.Checked)
            {
                cONTRATOBindingSource.DataSource = contratoBL.GetAllContratosVigentesByObreros();
            }
        }

        private void rdbvigentes_CheckedChanged(object sender, EventArgs e)
        {
            if (rdbTodos.Checked)
            {
                CargarDatos();
            }
            if (rdbvigentes.Checked)
            {
                cONTRATOBindingSource.DataSource = contratoBL.GetAllContratosVigentesByObreros();
            }
        }

        

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            if (rdbTodos.Checked)
            {
                if (RBOpTrabajador.Checked)
                {
                    cONTRATOBindingSource.DataSource = contratoBL.GetAllContratosToObrerosByTrabajador(txtDni.Text);
                }
                if (RBOpEspecialidad.Checked)
                {
                    cONTRATOBindingSource.DataSource = contratoBL.GetAllContratosToObrerosByEspecialidad(txtDescripcionEspecialidad.Text);
                }
                if (RBOpProyecto.Checked)
                {
                    cONTRATOBindingSource.DataSource = contratoBL.GetAllContratosToObrerosByProyecto(txtDescripcionProyecto.Text);
                }
            }

            if (rdbvigentes.Checked)
            {
                if (RBOpTrabajador.Checked)
                {
                    cONTRATOBindingSource.DataSource = contratoBL.GetAllContratosVigentesToObrerosByTrabajador(txtDni.Text);
                }
                if (RBOpEspecialidad.Checked)
                {
                    cONTRATOBindingSource.DataSource = contratoBL.GetAllContratosVigentesToObreroByEspecialidad(txtDescripcionEspecialidad.Text);
                }
                if (RBOpProyecto.Checked)
                {
                    cONTRATOBindingSource.DataSource = contratoBL.GetAllContratosVigentesToObreroByProyecto(txtDescripcionProyecto.Text);
                }
            }
        }

        private void btnNuevo_Click(object sender, EventArgs e)
        {
            FrmMttoContrato frm = new FrmMttoContrato();
            frm.NuevoContrato();
            frm.ShowDialog();
            CargarDatos();
        }

        private void button2_Click(object sender, EventArgs e)
        {

            CONTRATO currentContrato = cONTRATOBindingSource.Current as CONTRATO;
            if (currentContrato != null)
            {
                FrmMttoContrato frmmttocontrato = new FrmMttoContrato();
                frmmttocontrato._contrato = currentContrato;
                frmmttocontrato.EditarContrato();
                frmmttocontrato.ShowDialog();
            }
            else
            {
                MessageBox.Show("Mensaje", "Seleccione un Item", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            CONTRATO currentContrato = cONTRATOBindingSource.Current as CONTRATO;

            if (currentContrato != null)
            {
                DialogResult rpta = MessageBox.Show(this,
                            "Desea finalizar el Contrato",
                            "Mensaje",
                            MessageBoxButtons.YesNo,
                            MessageBoxIcon.Information);
                if (rpta == DialogResult.Yes)
                {
                    FrmMttoFinalizacionContrato frm = new FrmMttoFinalizacionContrato();
                    frm._currentContrato = currentContrato;
                    frm.NuevoFinContrato();
                    frm.ShowDialog();
                }
            }
            else
            {
                MessageBox.Show("Seleccione un Contrato");
            }
        }

        private void btnPermiso_Click(object sender, EventArgs e)
        {
            CONTRATO currentContrato = cONTRATOBindingSource.Current as CONTRATO;
            if (currentContrato != null)
            {
                FrmPermisos frm = new FrmPermisos();
                frm.CurrentContrato = currentContrato;
                frm.permisoContrato();
                frm.ShowDialog();
            }
            else
            {
                MessageBox.Show("Seleccione un Contrato");
            }
        }

        private void btnCondiciones_Click(object sender, EventArgs e)
        {
            CONTRATO currentContrato = cONTRATOBindingSource.Current as CONTRATO;
            if (currentContrato != null)
            {
                FrmCondiciones frm = new FrmCondiciones();
                frm.CurrentContrato = currentContrato;
                frm.condicionContrato();
                frm.ShowDialog();
            }
            else
            {
                MessageBox.Show("Seleccione un Contrato");
            }
        }

        private void btnSanciones_Click(object sender, EventArgs e)
        {
            CONTRATO currentContrato = cONTRATOBindingSource.Current as CONTRATO;
            if (currentContrato != null)
            {
                FrmSanciones frm = new FrmSanciones();
                frm.CurrentContrato = currentContrato;
                frm.sancionContrato();
                frm.ShowDialog();
            }
            else
            {
                MessageBox.Show("Seleccione un Contrato");
            }
        }

        private void txtDescripcion_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        public void cargarFecha()
        {
            var a = dtpFecNacIni.Value = dtpFecha.Value.AddDays(14);
            var b = dtpFecNacFin.Value = dtpFecNacIni.Value.AddDays(30);
            cONTRATOBindingSource.DataSource = contratoBL.GetAllFromContratoToStaffByFecha(Convert.ToInt32(a.Month.ToString()), Convert.ToInt32(b.Month.ToString()));
        }

        private void btnGenerar_Click(object sender, EventArgs e)
        {
            var a = dtpFecNacIni.Value = dtpFecha.Value.AddDays(14);
            var b = dtpFecNacFin.Value = dtpFecNacIni.Value.AddDays(30);
            cONTRATOBindingSource.DataSource = contratoBL.GetAllFromContratoToStaffByFecha(Convert.ToInt32(a.Month.ToString()), Convert.ToInt32(b.Month.ToString()));
       
        }

        private void txtDescripcion_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                //cONTRATOBindingSource.DataSource = contratoBL.GetAllContratosToObrerosByTrabajador(txtDescripcion.Text);
            }
        }

        private void RBOpTrabajador_CheckedChanged(object sender, EventArgs e)
        {
            if (RBOpEspecialidad.Checked)
            {
                GBEspecialidad.Visible = true;
                btnBuscar.Visible = true;
                GBProyecto.Visible = false;
                GBTrabajador.Visible = false;
            }

            if (RBOpTrabajador.Checked)
            {
                GBEspecialidad.Visible = false;
                GBProyecto.Visible = false;
                GBTrabajador.Visible = true;
                btnBuscar.Visible = true;
                btnBuscarTrabajador.Enabled = true;
            }

            if (RBOpProyecto.Checked)
            {
                GBEspecialidad.Visible = false;
                GBProyecto.Visible = true;
                btnBuscar.Visible = true;
                GBTrabajador.Visible = false;
            }
        }

        
        private void RBOpProyecto_CheckedChanged(object sender, EventArgs e)
        {
            if (RBOpEspecialidad.Checked)
            {
                GBEspecialidad.Visible = true;
                btnBuscar.Visible = true;
                GBProyecto.Visible = false;
                GBTrabajador.Visible = false;
            }

            if (RBOpTrabajador.Checked)
            {
                GBEspecialidad.Visible = false;
                GBProyecto.Visible = false;
                GBTrabajador.Visible = true;
                btnBuscar.Visible = true;
            }

            if (RBOpProyecto.Checked)
            {
                GBEspecialidad.Visible = false;
                GBProyecto.Visible = true;
                btnBuscar.Visible = true;
                GBTrabajador.Visible = false;
                btnBuscarProyecto.Enabled = true;
            }
        }

        private void RBOpEspecialidad_CheckedChanged(object sender, EventArgs e)
        {
            if (RBOpEspecialidad.Checked)
            {
                GBEspecialidad.Visible = true;
                btnBuscar.Visible = true;
                GBProyecto.Visible = false;
                GBTrabajador.Visible = false;
            }

            if (RBOpTrabajador.Checked)
            {
                GBEspecialidad.Visible = false;
                GBProyecto.Visible = false;
                GBTrabajador.Visible = true;
                btnBuscar.Visible = true;
            }

            if (RBOpProyecto.Checked)
            {
                GBEspecialidad.Visible = false;
                GBProyecto.Visible = true;
                btnBuscar.Visible = true;
                GBTrabajador.Visible = false;
            }
        }

        private void txtDescripcionProyecto_TextChanged(object sender, EventArgs e)
        {

        }

        private void btnBuscarEspecialidad_Click(object sender, EventArgs e)
        {
            FrmEspecialidad frmespecialidad = new FrmEspecialidad();
            frmespecialidad.Extend();
            frmespecialidad.ShowDialog();

            if (frmespecialidad.currentEspecialidad != null)
            {
                txtIdEspecialidad.Text = Convert.ToString(frmespecialidad.currentEspecialidad.IdEspecialidad);
                txtDescripcionEspecialidad.Text = frmespecialidad.currentEspecialidad.Descripcion;
            }
        }

        private void btnBuscarProyecto_Click(object sender, EventArgs e)
        {
            FrmProyecto frmProyecto = new FrmProyecto();
            frmProyecto.Extend();
            frmProyecto.ShowDialog();

            if (frmProyecto.currentProyecto != null)
            {
                txtIdProyecto.Text = Convert.ToString(frmProyecto.currentProyecto.IdProyecto);
                txtDescripcionProyecto.Text = frmProyecto.currentProyecto.NombreProyecto;
            }
        }

        private void btnBuscarTrabajador_Click(object sender, EventArgs e)
        {
            FrmTrabajador frmtrabajador = new FrmTrabajador();
            frmtrabajador.Extend();
            frmtrabajador.ShowDialog();

            if (frmtrabajador.currentTrabajador != null)
            {
                txtIdtrabajador.Text = Convert.ToString(frmtrabajador.currentTrabajador.Id);
                txtDescripcionTrabajador.Text = frmtrabajador.currentTrabajador.PERSONA.NombreCompleto;
                txtDni.Text = frmtrabajador.currentTrabajador.PERSONA.Dni;
            }
        }    
    }
}
